import { promises as fs } from 'fs'
import path from 'path'

// 定义一个全局变量来存储应用数据
let appsData: any[] = []
// 定义一个Map来存储每个分类文件的数据
let categoryAppsMap = new Map<string, any[]>()
let isDataLoaded = false // 添加标志位来跟踪数据加载状态

export default defineNitroPlugin(async () => {
  try {
    console.log('=== 开始预加载应用数据 ===')
    const filePath = 'public/data/apps'
    const files = await fs.readdir(filePath)
    console.log('===找到文件:', files.length, '条文件 ===')
    
    // 清空之前的数据
    categoryAppsMap.clear()
    appsData = []
    
    // 并行读取所有文件
    const fileReadPromises = files.map(async file => {
      try {
        // 读取文件内容
        const content = await fs.readFile(path.join(filePath, file), 'utf8')
        // 解析 JSON 数据
        const fileData = JSON.parse(content)
        // 验证数据完整性
        if (!Array.isArray(fileData)) {
          throw new Error(`文件 ${file} 的数据格式不正确，应为数组`)
        }
        const categoryName = path.basename(file, '.json')
        return { categoryName, fileData }
      } catch (error) {
        console.error(`加载文件 ${file} 时出错:`, error)
        return null
      }
    })

    // 等待所有文件读取完成
    const results = await Promise.all(fileReadPromises)
    
    // 处理读取结果
    for (const result of results) {
      if (result) {
        const { categoryName, fileData } = result
        categoryAppsMap.set(categoryName, fileData)
        appsData = appsData.concat(fileData)
      }
    }
    
    isDataLoaded = true
    console.log('=== 应用数据预加载完成，共加载', appsData.length, '条数据 ===')
  } catch (error) {
    console.error('Error preloading apps data:', error)
  }
})

// 导出一个函数来获取所有应用数据
export function getAppsData() {
  if (!isDataLoaded) {
    console.warn('应用数据尚未加载完成')
    return []
  }
  return appsData
}

// 导出一个函数来获取特定分类的应用数据
export function getCategoryApps(categoryName: string) {
  if (!isDataLoaded) {
    console.warn('应用数据尚未加载完成')
    return []
  }
  return categoryAppsMap.get(categoryName) || []
} 